/**
 * @file mqtt_config_loader.h
 * @brief MQTT配置加载器
 * @details 从配置文件加载MQTT连接和主题配置
 * 
 * @author zyb
 * @date 2025-10-30
 * @version 1.0
 */

#ifndef MQTT_CONFIG_LOADER_H
#define MQTT_CONFIG_LOADER_H

#include "mqtt_client.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief MQTT完整配置结构（包含连接和主题）
 */
typedef struct {
    /* MQTT连接配置 */
    mqtt_config_t connection;           /* MQTT broker连接配置 */
    
    /* MQTT主题配置 */
    char topic_control[256];            /* 控制指令主题(订阅) */
    char topic_data[256];               /* 数据上报主题(发布) */
    char topic_status[256];             /* 状态上报主题(发布) */
    char topic_alarm[256];              /* 告警上报主题(发布) */
    
    /* 设备信息 */
    char device_id[64];                 /* 设备ID */
    char station_id[64];                /* 站点ID */
    char device_type[64];               /* 设备类型 */
    
    /* 数据上报配置 */
    uint32_t data_report_interval;      /* 数据上报周期(秒) */
    uint32_t status_report_interval;    /* 状态上报周期(秒) */
    
    /* 缓冲区配置 */
    uint32_t message_buffer_size;       /* 消息缓冲区大小 */
    uint32_t message_queue_size;        /* 消息队列大小 */
    
} mqtt_full_config_t;

/**
 * @brief 加载MQTT配置
 * @param config 配置结构指针
 * @param config_file 配置文件路径
 * @return 0表示成功，-1表示失败
 */
int mqtt_config_load(mqtt_full_config_t* config, const char* config_file);

/**
 * @brief 打印MQTT配置
 * @param config 配置结构指针
 */
void mqtt_config_print(const mqtt_full_config_t* config);

/**
 * @brief 验证MQTT配置
 * @param config 配置结构指针
 * @return 0表示配置有效，-1表示配置无效
 */
int mqtt_config_validate(const mqtt_full_config_t* config);

#ifdef __cplusplus
}
#endif

#endif /* MQTT_CONFIG_LOADER_H */

